home *** CD-ROM | disk | FTP | other *** search
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <title>10.2. Variables And Functions</title>
- <link rel="stylesheet" href="gimp-help-plain.css" type="text/css" />
- <link rel="stylesheet" href="gimp-help-screen.css" type="text/css" />
- <meta name="generator" content="DocBook XSL Stylesheets V1.66.1" />
- <link rel="start" href="index.html" title="GIMP User Manual" />
- <link rel="up" href="ch02s10.html" title="10. A Script-Fu Tutorial" />
- <link rel="prev" href="ch02s10.html" title="10. A Script-Fu Tutorial" />
- <link rel="next" href="ch02s10s03.html" title="10.3. Lists, Lists And More Lists" />
- </head>
- <body>
- <div xmlns="" class="navheader">
- <table width="100%" summary="Navigation header">
- <tr>
- <th colspan="3" align="center" id="chaptername">10. A Script-Fu Tutorial</th>
- </tr>
- <tr>
- <td width="20%" align="left"><a accesskey="p" href="ch02s10.html">Prev</a> </td>
- <th width="60%" align="center" id="sectionname">10.2. Variables And Functions</th>
- <td width="20%" align="right"> <a accesskey="n" href="ch02s10s03.html">Next</a></td>
- </tr>
- </table>
- <hr />
- </div>
- <div class="sect2" lang="en" xml:lang="en">
- <div class="titlepage">
- <div>
- <div>
- <h3 class="title"><a id="id3429359"></a>10.2. Variables And Functions</h3>
- </div>
- </div>
- </div>
- <p>
- Now that we know that every Scheme statement is enclosed in
- parentheses, and that the function name/operator is listed first,
- we need to know how to create and use variables, and how to create
- and use functions. We'll start with the variables.
- </p>
- <div class="simplesect" lang="en" xml:lang="en">
- <div class="titlepage">
- <div>
- <div>
- <h4 class="title"><a id="id3429375"></a>Declaring Variables</h4>
- </div>
- </div>
- </div>
- <p>
- Although there are a couple of different methods for declaring
- variables, the preferred method is to use the let*
- construct. If you're familiar with other programming
- languages, this construct is equivalent to defining a list of
- local variables and a scope in which they're active. As an
- example, to declare two variables, a and b, initialized to 1
- and 2, respectively, you'd write:
- </p>
- <pre class="programlisting">
- (let* (
- (a 1)
- (b 2)
- )
- (+ a b)
- )
- </pre>
- <p>
- or, as one line:
- </p>
- <pre class="programlisting">
- (let* ( (a 1) (b 2) ) (+ a b) )
- </pre>
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
- <table border="0" summary="Note">
- <tr>
- <td rowspan="2" align="center" valign="top" width="25">
- <img alt="[Note]" src="../images/note.png" />
- </td>
- <th align="left">Note</th>
- </tr>
- <tr>
- <td colspan="2" align="left" valign="top">
- <p>
- You'll have to put all of this on one line if you're using the
- console window. In general, however, you'll want to adopt a
- similar practice of indentation to help make your scripts more
- readable. We'll talk a bit more about this in the section on
- White Space.
- </p>
- </td>
- </tr>
- </table>
- </div>
- <p>
- This declares two local variables, a and b, initializes them,
- then prints the sum of the two variables.
- </p>
- </div>
- <div class="simplesect" lang="en" xml:lang="en">
- <div class="titlepage">
- <div>
- <div>
- <h4 class="title"><a id="id3429424"></a>What Is A Local Variable?</h4>
- </div>
- </div>
- </div>
- <p>
- You'll notice that we wrote the summation <tt class="code">(+ a b)</tt>
- within the parens of the <tt class="code">let*</tt> expression, not after it.
- </p>
- <p>
- This is because the <tt class="code">let*</tt> statement defines an
- area in your script in which the declared variables are
- usable; if you type the (+ a b) statement after the (let* ...)
- statement, you'll get an error, because the declared variables
- are only valid within the context of the <tt class="code">let*</tt> statement; they
- are what programmers call local variables.
- </p>
- </div>
- <div class="simplesect" lang="en" xml:lang="en">
- <div class="titlepage">
- <div>
- <div>
- <h4 class="title"><a id="id3429462"></a>The General Syntax Of <tt class="code">let*</tt></h4>
- </div>
- </div>
- </div>
- <p>
- The general form of a <tt class="code">let*</tt> statement is:
- </p>
- <pre class="programlisting">
- (let* ( <i class="replaceable"><tt>variables</tt></i> ) <i class="replaceable"><tt>expressions</tt></i> )
- </pre>
- <p>
- where variables are declared within parens, e.g., (a 2), and
- expressions are any valid Scheme expressions. Remember that
- the variables declared here are only valid within the
- <tt class="code">let*</tt> statement -- they're local variables.
- </p>
- </div>
- <div class="simplesect" lang="en" xml:lang="en">
- <div class="titlepage">
- <div>
- <div>
- <h4 class="title"><a id="id3429506"></a>White Space</h4>
- </div>
- </div>
- </div>
- <p>
- Previously, we mentioned the fact that you'll probably want to
- use indentation to help clarify and organize your
- scripts. This is a good policy to adopt, and is not a problem
- in Scheme -- white space is ignored by the Scheme interpreter,
- and can thus be liberally applied to help clarify and organize
- the code within a script. However, if you're working in
- Script-Fu's Console window, you'll have to enter an entire
- expression on one line; that is, everything between the
- opening and closing parens of an expression must come on one
- line in the Script-Fu Console window.
- </p>
- </div>
- <div class="simplesect" lang="en" xml:lang="en">
- <div class="titlepage">
- <div>
- <div>
- <h4 class="title"><a id="id3429528"></a>Assigning A New Value To A Variable</h4>
- </div>
- </div>
- </div>
- <p>
- Once you've initialized a variable, you might need to change
- its value later on in the script. Use the set! statement to
- change the variable's value:
- </p>
- <pre class="programlisting">
- (let* ( (theNum 10) ) (set! theNum (+ theNum \ theNum)) )
- </pre>
- <p>
- Try to guess what the above statement will do, then go ahead
- and enter it in the Script-Fu Console window.
- </p>
- <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;">
- <table border="0" summary="Note">
- <tr>
- <td rowspan="2" align="center" valign="top" width="25">
- <img alt="[Note]" src="../images/note.png" />
- </td>
- <th align="left">Note</th>
- </tr>
- <tr>
- <td colspan="2" align="left" valign="top">
- <p>
- The "\" indicates that there is no line break. Ignore it (don't
- type it in your Script-Fu console and don't hit Enter), just
- continue with the next line.
- </p>
- </td>
- </tr>
- </table>
- </div>
- </div>
- <div class="simplesect" lang="en" xml:lang="en">
- <div class="titlepage">
- <div>
- <div>
- <h4 class="title"><a id="id3429561"></a>Functions</h4>
- </div>
- </div>
- </div>
- <p>
- Now that you've got the hang of variables, let's get to work
- with some functions. You declare a function with the following
- syntax:
- </p>
- <pre class="programlisting">
- (define (<i class="replaceable"><tt>name</tt></i> <i class="replaceable"><tt>param-list</tt></i>) <i class="replaceable"><tt>expressions</tt></i>)
- </pre>
- <p>
- where <i class="replaceable"><tt>name</tt></i> is the name assigned to
- this function, <i class="replaceable"><tt>param-list</tt></i> is a
- space-delimited list of parameter names, and
- <i class="replaceable"><tt>expressions</tt></i> is a series of
- expressions that the function executes when it's called. For
- example:
- </p>
- <pre class="programlisting">
- (define (AddXY inX inY) (+ inX inY) )
- </pre>
- <p>
- <tt class="varname">AddXY</tt> is the function's name and
- <tt class="varname">inX</tt> and <tt class="varname">inY</tt> are the
- variables. This function takes its two parameters and adds
- them together.
- </p>
- <p>
- If you've programmed in other imperative languages (like
- C/C++, Java, Pascal, etc.), you might notice that a couple of
- things are absent in this function definition when compared to
- other programming languages.
- </p>
- <div class="itemizedlist">
- <ul type="disc">
- <li>
- <p>
- First, notice that the parameters don't have any "types"
- (that is, we didn't declare them as strings, or integers,
- etc.). Scheme is a type-less language. This is handy and
- allows for quicker script writing.
- </p>
- </li>
- <li>
- <p>
- Second, notice that we don't need to worry about how to
- "return" the result of our function -- the last statement is
- the value "returned" when calling this function. Type the
- function into the console, then try something like:
- </p>
- <pre class="programlisting">
- (AddXY (AddXY 5 6) 4)
- </pre>
- </li>
- </ul>
- </div>
- </div>
- </div>
- <div class="navfooter">
- <hr />
- <table width="100%" summary="Navigation footer">
- <tr>
- <td width="40%" align="left"><a accesskey="p" href="ch02s10.html">Prev</a> </td>
- <td width="20%" align="center">
- <a accesskey="u" href="ch02s10.html">Up</a>
- </td>
- <td width="40%" align="right"> <a accesskey="n" href="ch02s10s03.html">Next</a></td>
- </tr>
- <tr>
- <td width="40%" align="left" valign="top">10. A Script-Fu Tutorial </td>
- <td width="20%" align="center">
- <a accesskey="h" href="index.html">Home</a>
- </td>
- <td width="40%" align="right" valign="top"> 10.3. Lists, Lists And More Lists</td>
- </tr>
- </table>
- </div>
- </body>
- </html>
-